AWS Glue for Apache Spark ネイティブ接続を使用して BigQuery のデータを Amazon S3 に転送する
こんにちは!よしななです。
今回は、AWS が提供している AWS Glue for Apache Spark ネイティブ接続を使用して、BigQuery のデータを Amazon S3 に転送する処理を試してみました。
目次
- やりたいこと
- 事前準備 : Google Cloud
- サービスアカウントの作成
- クレデンシャルファイルのダウンロード
- BigQuery テーブル作成
- 事前準備 : AWS
- クレデンシャルの登録
- IAM ロールの作成
- S3 バケットの作成
- AWS Glue for Apache Spark ネイティブ接続を使用してデータ転送処理を試してみる
- Connector の作成
- ジョブの作成
- 実行結果
- 作業終了時の注意点
やりたいこと
今回やりたいこととしては、以下に示した構成図の通り BigQuery のデータを Amazon S3 に転送する処理を試します。
BigQuery と AWS Glue を接続するために、2023/10/19 にサポートされた AWS Glue for Apache Spark ネイティブ接続を使用します。
事前準備 : Google Cloud
サービスアカウントの作成
AWS Glue と BigQuery を接続するために、Google Cloud コンソールからサービスアカウントを作成します。
入力項目
- サービス アカウントの詳細
- サービス アカウント名
- 任意のサービスアカウント名を入力 今回は
glue_connection
を入力 作成して続行
をクリック
- 任意のサービスアカウント名を入力 今回は
- サービス アカウント名
- このサービス アカウントにプロジェクトへのアクセスを許可する
- ロールの選択
- 作成するサービスアカウントに付与する IAM ロールを選択 今回は
BigQuery 管理者
を選択 完了
をクリック
- 作成するサービスアカウントに付与する IAM ロールを選択 今回は
- ロールの選択
クレデンシャルファイルのダウンロード
作成したサービスアカウントから、クレデンシャルファイルをダウンロードします。
キーのタイプ:JSON を選択し作成をクリックすると、JSON 形式のクレデンシャルファイルがダウンロードされます。
BigQuery テーブル作成
Glueジョブから抽出するためのデータをBigQueryにロードしておきます。
データは Video Game Sales (by Kaggle) のvgsales.csv
を使用します。
入力項目
- ファイルを選択
- ダウンロードした Video Game Sales (by Kaggle) データをアップロード
- データセット
新しいデータセットの作成
からデータセットを新規作成
- テーブル名
- 任意のテーブル名を入力 今回は
vgsales
を入力
- 任意のテーブル名を入力 今回は
- スキーマ
自動検出
チェックボックスにチェックを入れる- ここまで入力したら
テーブルを作成
をクリック
作成したテーブル:
事前準備 : AWS
クレデンシャルの登録
Google Cloud 側の事前準備で作成 / ダウンロードしたJSON クレデンシャルファイルを AWS Secrets Manager に登録します。 AWS Secrets Manager から新しいシークレットを作成します。
入力項目
- シークレットのタイプ
その他のシークレットのタイプ
を選択
- キー / 値のペア
- キー:
credentials
を指定 - 値:クレデンシャルファイルの中身を base64 エンコードした値を設定
- 値に改行、スペースが含まれているとエラーになるため注意
- キー:
$ base64 gcp-credential.json ewoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.....
IAM の作成
Glue ジョブが利用する IAM ロールを作成します。
glue.amazonaws.com
と信頼関係を持つ IAM ロールを作成し、以下4つのマネージドポリシーを割り当てます。
- AmazonS3FullAccess
- AWSGlueServiceRole
- SecretsManagerReadWrite
S3 バケットの作成
BigQuery から抽出したデータのアップロード先バケットを作成します。
bigquery-glue-test
をバケット名に指定し、作成します。
AWS Glue for Apache Spark ネイティブ接続を使用してデータ転送処理を試してみる
Connector の作成
BigQuery と AWS を接続するための Connector を設定します。
設定項目
- Choose data source
Google BigQuery
を選択
- Configure connection
- Connection details
- 先ほど作成した AWS Secrets Manager を入力
- Connection details
ジョブの作成
事前準備が整ったので、BigQuery からデータを取得し、Amazon S3 にアップロードするジョブを Glue Studio にて作成します。
Visual ETL
をクリックします。
Source
からGoogle BigQuery
を選択します。
Source 設定項目
- Google BigQuery connection
- 作成した Connector 名を入力
- Parent project
- BigQuery テーブルを作成したプロジェクト名を入力
- Table
- BigQuery テーブルを作成したデータセット名、テーブル名を入力
{データセット名}.{テーブル名}
の形式で入力
- IAM role
- 作成した IAM ロール名を選択
Source
の設定が完了したら、次にTarget
の設定をします。
Target
からAmazon S3
を選択します。
Target 設定項目
- Node parents
Google BigQuery
を選択
- S3 Target Location
- 作成した S3 バケット名を選択
- Format
- 今回は BigQuery に保存されたデータを parquet 形式に変換するため、parquet に設定
以上で設定が完了になります。作成したジョブを実行します。
Glue Studio 画面右上のRun
をクリックします。
実行結果
ジョブの実行状態はRun
から確認できます。
ジョブの実行が完了したため、S3 バケットを確認します。
BigQuery のデータが parquet 形式に変換され、S3 バケットに保存されているのを確認しました!
作業終了時の注意点
一通り検証が完了したら、Interactive Sessions
を確認しておきます。
Data preview
が起動し、裏でInteractive Session
が起動している可能性があるため、Status
がReady
になっていたらStop session
しておきます。思わぬ課金を防ぐためです。
以上で、AWS Glue for Apache Spark ネイティブ接続を使用して BigQuery のデータを Amazon S3 に転送する は完了となります。ここまで読んでいただきありがとうございました!
参考
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-etl-connect-bigquery-home.html
https://dev.classmethod.jp/articles/aws-glue-connector-for-google-bigquery-bigquery-to-s3/